\documentclass[12pt]{article}
\usepackage{fullpage}
%\usepackage[english]{babel}
\usepackage[frenchb]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{ae,aecompl}
\usepackage{listings}
\usepackage{caption}
\usepackage{xcolor}
\usepackage{url}

\title{Génie Logiciel - DM UML}
\author{MOIROUX Aurélie - FICHET Alban - CLEMENT Romain \\
        RICM4 - Option Multimédia\\ \\
        \textbf{Projet KiCTRL}}
\date{}

\begin{document}

\maketitle

\newpage

\section{Cahier des charges}

\subsection{Objectifs}

Proposer une interaction homme-machine basée sur la technologie \emph{XBox Kinect}, permettant à l'utilisateur de contrôler une interface graphique avec des gestes simples et intuitifs. Le logiciel se présenterait sous la forme de plusieurs ``mini-applications'' juxtaposées horizontalement, à la manière du bien connu \emph{coverflow}. Ces applications permettraient de proposer des activités simples telles que la consultation des informations, de la météo ou du courrier électronique.

Un tel système conviendrait parfaitement à des personnes âgées ou à mobilité réduite présentant des difficultés de préemption vis-à-vis des systèmes d’interaction actuels comme le couple clavier-souris. 

\subsection{Fonctionnalités}

\begin{itemize}
\item L'arrivée de l'utilisateur stoppe la veille et permet d’afficher un tableau de bord
\item Le départ de l'utilisateur relance l'écran de veille
\item Une avancée de la tête donne un zoom avant sur le volet actif
\item Un mouvement vers l'avant de la main donne un zoom arrière sur le volet actif
\item Un déplacement de la main de façon verticale : défilement de la page
\item Un déplacement de la main de façon horizontale : changement de volet
\end{itemize}

\subsection{Extensions}

La possibilité de remplacer le dispositif \emph{Xbox Kinect} par un capteur de mouvement alternatif.

\subsection{Contraintes}

\begin{itemize}
\item Assurer la compatibilité de notre logiciel sur les 3 plateformes actuelles (Linux, Windows, MacOS)
\item Limiter le nombre de mouvements possibles (5 maximum) à chaque état du système.
\item Faire en sorte que les ``mini-applications'' puissent être développées et intégrées sous forme de plugin.
\end{itemize}


\newpage

\section{Diagramme UML de contexte}

\begin{center}
\includegraphics{UMLContexte.pdf}
\end{center}

\newpage

\section{Diagramme UML de cas d'utilisation}

\begin{center}
\includegraphics[scale=0.9]{diagUseCase.png}
\end{center}

\newpage

\section{Diagramme UML de classes}

\begin{center}
\includegraphics[scale=0.5]{diagClasses.png}
\end{center}

\newpage

\section{Diagramme UML d'objets}

\begin{center}
\includegraphics[scale=0.5]{diagObj.png}
\end{center}

\newpage

\section{Diagramme UML de séquence}

\begin{center}
\includegraphics[scale=0.8]{DiagrammeSequence.pdf}
\end{center}

\newpage

\section{Diagramme UML d'état}

\begin{center}
\includegraphics[scale=0.8]{stateMachine.png}
\end{center}

\newpage

\section{Expressions OCL}

\begin{enumerate}
\item Pour que l'utilisateur courant puisse naviguer entre ses applications, il faut que le nombre d'applications en cours soit strictement supérieure à 1 :

\begin{verbatim}
   context System::doGlobalAction(a : GlobalAction)
   pre: self.currentUser.nbApps() > 1
\end{verbatim}

\item Lorsqu'un utilisateur est absent, la navigation entre des applications est impossible :

\begin{verbatim}
   context System::doGlobalAction(a : GlobalAction)
   pre: self.nbUsers > 0
\end{verbatim}
\end{enumerate}

\newpage

\section{Descrition de l'éditeur UML}

Nous avons choisi d'utiliser le logiciel \emph{Visual Paradigm} afin d'éditer les diagrammes UML. En effet, cet éditeur est disponible soit en \emph{standalone} soit via un \emph{plug-in Eclipse}, l'IDE que nous utiliserons lors du développement.

De plus, sa simplicité d'utilisation ainsi que sa gratuité dans le cadre d'une utilisation non commerciale sont des atouts majeurs. Enfin, il est possible d'exporter les schémas UML au format XMI evitant d'être indéfiniment lié a cet éditeur dans le futur.

Dans Eclipse, il suffit dans un projet de créer un nouveau fichier UML. Ensuite, l'IDE migre vers la perspective adéquate. Les fichiers UML font apparaitre à leur ouverture un ensemble d'outils correspondants au type de diagramme édité. Une fois le diagramme de classe créé, l'ensemble des autres documents peuvent facilement faire référence aux classes de ce diagramme. Cela permet ainsi une grande homogénéite et évite lors du changement des propriété d'une classe d'oublier des modification dans l'ensemble des autre schémas.

\subsection{Copie d'écran de \emph{Visual Paradigm}}

\begin{center}
\includegraphics[scale=0.4]{capture_modeling_tool.png}
\end{center}

\subsection{Bonus : Génération de code}

Nous avons généré les classes C++ du diagramme via \emph{Visual Paradigm}.Cette option se réalise via le menu "Modeling" ajouté apres l'installation du plug-in.
\newpage

\section{Bonus : Plannification}

Voici notre diagramme de \emph{GANTT} avec les principales tâches et jalons de notre projet :

\begin{center}
\includegraphics[scale=0.35]{gant.png}
\end{center}

\end{document}
